package com.gjintel.framework.util;

import com.gjintel.framework.cache.InitCacheData;
import com.gjintel.framework.dict.model.Dictionary;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @description 数据字典工具类
 * @author fengya
 * @date 2015-7-31 下午01:37:14
 */
public class DictUtil {

	private DictUtil() {
	}

	/**
	 * @方法名：dict
	 * @功能说明：根据父节点的值和子节点的值，定位到子节点对象中
	 * @author fengya
	 * @date 2014-10-13 下午04:23:27
	 * @param pValue
	 * @param cValue
	 * @return
	 * @return Dictionary
	 */
	public static Dictionary dict(String pValue, String cValue) {
		List<Dictionary> childrens = dictChildren(pValue);
		if (childrens != null && !childrens.isEmpty()) {
			for (Dictionary dict : childrens) {
				if (dict.getValue() != null && dict.getValue().equals(cValue)) {
					return dict;
				}
			}
		}
		return null;
	}

	/**
	 * @方法名：dict
	 * @功能说明：根据父节点的值，获得父节点下所有的孩子节点
	 * @author fengya
	 * @date 2014-10-13 下午04:22:51
	 * @param pValue
	 * @return
	 * @return List<Dictionary>
	 */
	@SuppressWarnings("unchecked")
	public static List<Dictionary> dictChildren(String pValue) {
		Map<String, Object> dataMap = InitCacheData.getInstance().getCacheData(InitCacheData.CacheType.DICT);
		if (dataMap != null && !dataMap.isEmpty()) {
			Collection<Object> childrens = dataMap.values();
			Dictionary dict = null;
			Dictionary pDict = null;
			for (Object obj : childrens) {
				if (obj instanceof Dictionary) {
					dict = (Dictionary) obj;
					if (dict.getValue() != null && dict.getValue().equals(pValue)) {
						pDict = dict;
					}
				}
			}
			if (pDict != null) {
				return InitCacheData.getInstance().getCacheTreeData(InitCacheData.CacheType.DICT).get(pDict.getId());
			}
		}
		return null;
	}

	/**
	 * @方法名：dict
	 * @功能说明：根据父节点的值，获得父节点下所有的孩子节点
	 * @author fengya
	 * @date 2014-10-13 下午04:22:51
	 * @param pValue
	 * @return
	 * @return List<Dictionary>
	 */
	@SuppressWarnings("unchecked")
	public static List<Dictionary> dictChildren(String pValue, String roleId) {
		Map<String, Object> dataMap = InitCacheData.getInstance().getCacheData(InitCacheData.CacheType.DICT);
		if (dataMap != null && !dataMap.isEmpty()) {
			Collection<Object> childrens = dataMap.values();
			Dictionary dict = null;
			Dictionary pDict = null;
			for (Object obj : childrens) {
				if (obj instanceof Dictionary) {
					dict = (Dictionary) obj;
					if (dict.getValue() != null && dict.getValue().equals(pValue)) {
						pDict = dict;
					}
				}
			}
			if (pDict != null) {
				List<Dictionary> tempList = InitCacheData.getInstance().getCacheTreeData(InitCacheData.CacheType.DICT)
						.get(pDict.getId());
				List<Dictionary> dictList = new ArrayList<Dictionary>();
				for (Dictionary d : tempList) {
					if (isDicByRole(d, roleId)) {// 角色
						dictList.add(d);
					}
				}
				return dictList;
			}
		}
		return null;
	}

	/**
	 * @description 根据角色
	 * @author wwang
	 * @date 2016年9月2日
	 * @param dict
	 * @param roleId
	 * @return
	 */
	private static boolean isDicByRole(Dictionary dict, String roleId) {
		// TODO wei 条件查询项目状态 下拉过滤
		if ("buyer".equals(roleId)) {// 采购人
			return true;
		} else if ("auditor".equals(roleId)) {// 审核人
			if (dict.getDisSort() < 2) {
				return false;
			}
		} else if ("system".equals(roleId)) {// 受理分配人
			if (dict.getDisSort() < 4) {
				return false;
			}
		} else if ("manager".equals(roleId)) {// 项目负责人
			if (dict.getDisSort() < 5) {
				return false;
			}
		} else if ("bidder".equals(roleId)) {// 投标人(状态为审核通过的项目)
			if (dict.getValue().equals("10") || dict.getValue().equals("20") || dict.getValue().equals("30") || dict.getValue().equals("40")) {
				return false;
			}
		} else if ("bizmanager".equals(roleId)) {// 业务管理员
			return true;
		} else if ("admin".equals(roleId)) {// 管理员
			return true;
		}
		return true;
	}
}
